public class code1 {
//    力扣 150 简化路径
public String simplifyPath(String path) {
    // 阅读题目，可以总结出一个道理
    // 在字符串中 除了 / 、字符 其余的 “..”、“.”
    // 都是用来对于文件目录的 跳转 等操作的。

    // 所以，基本思路就是，将这些字段通过 / 进行分割
    // 之后，再将这些字段通过循环判断，最终构建成一个新的字符串即可

    // 首先，针对字符串先进行分割
    String[] rePath = path.split("/");
    int flag = 0;

    // 这里需要定义出一个标记为 flag 用来记录这里要被填入的值的位置
    for(int i = 0; i < rePath.length; i++) {
        // 首先针对 “.” 操作进行判断
        // 在分割完成后 / 位置就会变成 "" 所以这个也需要排除
        if (rePath[i].equals(".") || rePath[i].equals("")) {
            // 因为是 点 操作符，也就是说这里就是当前位置不变
            // 这里就是跳出当前循环
            continue;
        }
        if (rePath[i].equals("..")) {
            // 当这里是 “..” 操作时，此时也就是要返回上一级
            // 这里的标记位 flag 就需要更新
            // 这里跟新的是数组的下标
            flag = Math.max(0, flag - 1);
        } else {
            // 此时将 i 位置的 目录字符串 赋值到 flag 下标位置上
            rePath[flag] = rePath[i];
            // flag 下标后移
            flag++;
        }
    }
    // 如果此时 flag 的位置仍然为 0
    // 此时直接返回 "/" 即可
    if (flag == 0) {
        return "/";
    }

    // 通过 StringBuffer 来组建返回子字符串
    StringBuilder re = new StringBuilder();
    // 只将分割数组中 0-flag 位置的信息组建到一起即可
    for(int j = 0; j < flag; j++) {
        re.append("/").append(rePath[j]);
    }

    return re.toString();
}
}
